/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.woupla.model;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Dimitri Lebel
 */
@Entity
@Table(name = "Company_produit")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Companyproduit.findAll", query = "SELECT c FROM Companyproduit c"),
    @NamedQuery(name = "Companyproduit.findById", query = "SELECT c FROM Companyproduit c WHERE c.companyproduitPK.id = :id"),
    @NamedQuery(name = "Companyproduit.findByCompany", query = "SELECT c FROM Companyproduit c WHERE c.companyproduitPK.company = :company"),
    @NamedQuery(name = "Companyproduit.CountForCompany", query = "SELECT COUNT(c.label) FROM Companyproduit c WHERE c.companyproduitPK.company = :company"),
    @NamedQuery(name = "Companyproduit.findByProduit", query = "SELECT c FROM Companyproduit c WHERE c.companyproduitPK.produit = :produit"),
    @NamedQuery(name = "Companyproduit.findByLabel", query = "SELECT c FROM Companyproduit c WHERE c.label = :label"),
    @NamedQuery(name = "Companyproduit.findByCategory", query = "SELECT c FROM Companyproduit c WHERE c.category = :category"),
    @NamedQuery(name = "Companyproduit.findByEmployees", query = "SELECT c FROM Companyproduit c WHERE c.employees = :employees"),
    @NamedQuery(name = "Companyproduit.findByPrix", query = "SELECT c FROM Companyproduit c WHERE c.prix = :prix"),
    @NamedQuery(name = "Companyproduit.findByDuree", query = "SELECT c FROM Companyproduit c WHERE c.duree = :duree"),
    @NamedQuery(name = "Companyproduit.findByMargeAvant", query = "SELECT c FROM Companyproduit c WHERE c.margeAvant = :margeAvant"),
    @NamedQuery(name = "Companyproduit.findByMargeApres", query = "SELECT c FROM Companyproduit c WHERE c.margeApres = :margeApres"),
    @NamedQuery(name = "Companyproduit.findByAutoconfirme", query = "SELECT c FROM Companyproduit c WHERE c.autoconfirme = :autoconfirme")})
public class Companyproduit implements Serializable {

    /**
	 * 
	 */
	private static final long serialVersionUID = 6586026735034716178L;
	@EmbeddedId
    protected CompanyproduitPK companyproduitPK;
    @Column(name = "label")
    private String label;
    @Column(name = "category")
    private Category category;
    @Column(name = "employees")
    private String employees;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "prix")
    private BigDecimal prix;
    @Column(name = "duree")
    private Integer duree;
    @Column(name = "marge_avant")
    private Integer margeAvant;
    @Column(name = "marge_apres")
    private Integer margeApres;
    @Column(name = "autoconfirme")
    private Boolean autoconfirme;
    @JoinColumn(name = "produit", referencedColumnName = "id", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private ProduitGenerique produitGenerique;
    @JoinColumn(name = "Company", referencedColumnName = "id", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Company company;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "companyproduit")
    private Collection<Rdv> rdvCollection;

    public Companyproduit() {
    }

    public Companyproduit(CompanyproduitPK companyproduitPK) {
        this.companyproduitPK = companyproduitPK;
    }

    public Companyproduit(int id, Long company, int produit) {
        this.companyproduitPK = new CompanyproduitPK(id, company, produit);
    }

    public CompanyproduitPK getCompanyproduitPK() {
        return companyproduitPK;
    }

    public void setCompanyproduitPK(CompanyproduitPK companyproduitPK) {
        this.companyproduitPK = companyproduitPK;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public String getEmployees() {
        return employees;
    }

    public void setEmployees(String employees) {
        this.employees = employees;
    }

    public BigDecimal getPrix() {
        return prix;
    }

    public void setPrix(BigDecimal prix) {
        this.prix = prix;
    }

    public Integer getDuree() {
        return duree;
    }

    public void setDuree(Integer duree) {
        this.duree = duree;
    }

    public Integer getMargeAvant() {
        return margeAvant;
    }

    public void setMargeAvant(Integer margeAvant) {
        this.margeAvant = margeAvant;
    }

    public Integer getMargeApres() {
        return margeApres;
    }

    public void setMargeApres(Integer margeApres) {
        this.margeApres = margeApres;
    }

    public Boolean getAutoconfirme() {
        return autoconfirme;
    }

    public void setAutoconfirme(Boolean autoconfirme) {
        this.autoconfirme = autoconfirme;
    }

    public ProduitGenerique getProduitGenerique() {
        return produitGenerique;
    }

    public void setProduitGenerique(ProduitGenerique produitGenerique) {
        this.produitGenerique = produitGenerique;
    }

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company1) {
        this.company = company1;
    }

    @XmlTransient
    public Collection<Rdv> getRdvCollection() {
        return rdvCollection;
    }

    public void setRdvCollection(Collection<Rdv> rdvCollection) {
        this.rdvCollection = rdvCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (companyproduitPK != null ? companyproduitPK.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Companyproduit)) {
            return false;
        }
        Companyproduit other = (Companyproduit) object;
        if ((this.companyproduitPK == null && other.companyproduitPK != null) || (this.companyproduitPK != null && !this.companyproduitPK.equals(other.companyproduitPK))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "javaapplication1.Companyproduit[ companyproduitPK=" + companyproduitPK + " ]";
    }
    
}
